#include "Ciudad.h"

Ciudad::Ciudad(Cadena unNombre,bool esCapital,int maxRec)
{
	this->nombre=unNombre;
	this->capital=esCapital;
	this->maxRecursos=maxRec;
	Puntero<FuncionIguales<Puntero<Recurso>>> fi=new FuncionIgualesRecurso();
	Puntero<FuncionHash<Puntero<Recurso>>> fh=new RecursoFuncionHash(maxRec);
	this->recursos=new ColaHeapImp<Puntero<Recurso>>(maxRec,fh,fi);
}

Ciudad::~Ciudad(void)
{
this->recursos->vaciar();
}
Cadena Ciudad::ObtenerNombre()const
{
	return this->nombre;
}
bool Ciudad::esCapital()
{
	return this->capital;
}
Puntero<Iterador<pRecurso>> Ciudad::Recursos() const
{
	Puntero<Iterador<Puntero<Recurso>>> it= this->ObtenerRecurso()->ObtenerIterador();
	Puntero<Iterador<pRecurso>> it2=  new CastIterador<Recurso,IRecurso>(it);
	return it2;
}
bool Ciudad::TieneRecurso(Cadena recurso) const
{
	Puntero<Recurso> r=new Recurso(recurso,0,0,0);
	return this->ObtenerRecurso()->EstaDefinido(r);

}
Puntero<ColaHeapImp<Puntero<Recurso>>> Ciudad::ObtenerRecurso() const
{
	return this->recursos;
}
bool Ciudad::operator !=(const Ciudad &c) const
{
	return (this->nombre!=c.nombre);
}
bool Ciudad::operator ==(const Ciudad &c) const
{
	return(this->nombre==c.nombre); 
}
bool Ciudad::operator >(const Ciudad &c) const
{
	return(this->nombre>c.nombre);
}

bool Ciudad::operator <(const Ciudad &c) const
{
	return(this->nombre<c.nombre);
}
ostream &operator<<(ostream& out, const Ciudad & c)
{


	return 	cout<<c.nombre<<endl;
}













